package com.banksoft.front.util;

import com.banksoft.util.XmlUtil;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public final class ResponseUtil {

    public static String requestByPost(String urlString, String data) throws IOException {
        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setDefaultUseCaches(false);

        OutputStream os = conn.getOutputStream();
        try {
            os.write(data.getBytes("UTF-8"));
        } finally {
            if(os != null) os.close();
        }

        InputStream is = null;
        ByteArrayOutputStream baos = null;
        try {
            is = conn.getInputStream();
            baos = new ByteArrayOutputStream();
            int len;
            byte[] buff = new byte[1024 * 8];
            while((len = is.read(buff)) != -1)  {
                baos.write(buff, 0, len);
            }
            return new String(baos.toByteArray(), "UTF-8");
        } finally {
            if(baos != null) baos.close();
            if(is != null) is.close();
        }
    }

    public static String uploadImage(String requestUrl, File file){
        String boundary = String.valueOf(System.currentTimeMillis());
        String twoHyphens = "--";                  //分割线 ,连接线
        String end = "\r\n";                   //换行符，跳转到下一行开头
        String content_type = "application/octet-stream\\r\\n\\r\\n";
        String result = "";
        try {
            URL submit = new URL(requestUrl);
            HttpURLConnection conn=(HttpURLConnection) submit.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setUseCaches(false);

            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
//获取输出流对象，准备上传文件
            DataOutputStream dos=new DataOutputStream(conn.getOutputStream());
            dos.writeBytes(twoHyphens+boundary+end);
            dos.writeBytes("Content-Disposition: form-data; name=\""+file+"\";filename=\""
                    +file.getName()+";filelength=\""+file.length()+";Content-Type=\""+content_type+end);
            dos.writeBytes(end);
//对文件进行传输
            FileInputStream fis=new FileInputStream(file);
            byte[] buffer = new byte[8192]; // 8k
            int count = 0;
            while ((count = fis.read(buffer)) != -1)
            {
                dos.write(buffer, 0, count);
            }
            fis.close(); //关闭文件流

            dos.writeBytes(end);
            dos.writeBytes(twoHyphens + boundary + twoHyphens + end);
            dos.flush();

            InputStream is = conn.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "utf-8");
            BufferedReader br = new BufferedReader(isr);
            result = br.readLine();
            dos.close();
            is.close();

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("与服务器连接发生异常错误:" + e.toString());
            System.out.println("连接地址是:" + requestUrl);
        }
        return result;
    }

    public static File getImageFromNet(String imagePath) throws Exception {
        //new一个URL对象
        URL url = new URL(imagePath);
        //打开链接
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //设置请求方式为"GET"
        conn.setRequestMethod("GET");
        //超时响应时间为5秒
        conn.setConnectTimeout(5 * 1000);
        //通过输入流获取图片数据
        InputStream inStream = conn.getInputStream();
        //得到图片的二进制数据，以二进制封装得到数据，具有通用性
        byte[] data = readInputStream(inStream);
        File defaultFile = new File(imagePath);
        //new一个文件对象用来保存图片，默认保存当前工程根目录
        File imageFile = new File(defaultFile.getName());
        //创建输出流
        FileOutputStream outStream = new FileOutputStream(imageFile);
        //写入数据
        outStream.write(data);
        //关闭输出流
        outStream.close();
        return imageFile;
    }

    public static byte[] readInputStream(InputStream inStream) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        //创建一个Buffer字符串
        byte[] buffer = new byte[1024];
        //每次读取的字符串长度，如果为-1，代表全部读取完毕
        int len = 0;
        //使用一个输入流从buffer里把数据读取出来
        while( (len=inStream.read(buffer)) != -1 ){
            //用输出流往buffer里写入数据，中间参数代表从哪个位置开始读，len代表读取的长度
            outStream.write(buffer, 0, len);
        }
        //关闭输入流
        inStream.close();
        //把outStream里的数据写入内存
        return outStream.toByteArray();
    }

    public static void main(String[] args){
        try {
            String data = XmlUtil.formatDocToStr(XmlUtil.parseXmlFileToDoc("E:\\wx.xml")).toString();
            String str = requestByPost("http://localhost:8080/wx/receive",data);
            System.out.println(str);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
